package com.currentbp.Interesting.likou;

import com.currentbp.util.all.StringUtil;
import org.junit.Test;

/**
 * @author baopan
 * @createTime 2024/5/26 23:23
 */
public class T338countBits {
    /*
给你一个整数 n ，对于 0 <= i <= n 中的每个 i ，计算其二进制表示中 1 的个数 ，返回一个长度为 n + 1 的数组 ans 作为答案。
示例 1：
输入：n = 2
输出：[0,1,1]
解释：
0 --> 0
1 --> 1
2 --> 10
示例 2：
输入：n = 5
输出：[0,1,1,2,1,2]
解释：
0 --> 0
1 --> 1
2 --> 10
3 --> 11
4 --> 100
5 --> 101
     */
    @Test
    public void t1() {
        StringUtil.printObject(countBits(0));
        StringUtil.printObject(countBits(1));
        StringUtil.printObject(countBits(2));
        StringUtil.printObject(countBits(3));
        StringUtil.printObject(countBits(4));
        StringUtil.printObject(countBits(5));
    }

    public int[] countBits(int n) {
        int[] result = new int[n + 1];
        for (int i = 0, j = 0; i <= n; i++,j=i) {
            int count = 0;
            while (j != 0) {
                int remain = j % 2;
                if (remain == 1) {
                    count++;
                }
                j = j / 2;
            }
            result[i] = count;
        }


        return result;
    }
}
